www.gusucode.com > VC++ Firewall防火墙源代码 > VC++ Firewall防火墙源代码/Firewall防火墙/writethread.cpp
//Download by http://www.NewXing.com #include "stdafx.h" #include "FireWall1.h" #include "ip.h" #include "authentication.h" ///////////////////////////////////// /* 本程序公共缓冲区global[80]的Buffer内容进行处理, 最终写入虚拟网卡,不管是入栈还是出栈。 global_var global[80]见"testddk.h" 用到两种类型变量控制县城同步, 其中global_mutex是一个mutex, 用于控制global[]的下标Write_cur。 global[].hMutex是一组Event, 用于控制缓冲区。 */ //////////////////////////////////////// extern global_var global[80]; static write=0; extern HANDLE global_handle,global_handle1; extern BOOL CloseAll; extern ULONG initialized; extern BYTE INNO,OUTNO; extern HANDLE global_mutex;//控制Write_cur static int Write_cur=0;//global[]的下标 static int writecomp=0; extern int Resno;//恢复县城 VOID WINAPI WriteCompletionRoutine(DWORD dwErrorCode, DWORD dwNumberOfBytesTransferred, LPOVERLAPPED pOverlapped); extern HANDLE mythread_write; VOID WriteBuffer(BYTE *Buffer,LPOVERLAPPED pOverlapped); extern VOID ipfilter_pkt(ULONG ethlen,BYTE *m); extern void ipfilter_response_pkt(BYTE *rout,ULONG outlen,ULONG inlen,BYTE *min); extern BOOL NatPacket(BYTE* total_EthBuffer); int Flag2; BOOL ACK1; BYTE SpecialBuffer[1500],SpecialBuffer1[1500]; extern BOOL ACK; VOID WriteThread() { while(!CloseAll) { if(Write_cur>79)Write_cur=0; { DWORD dw=WaitForSingleObject(global[Write_cur].hMutex,INFINITE); if(dw==WAIT_OBJECT_0) { DWORD dwmutex=WaitForSingleObject(global_mutex,INFINITE); if(dwmutex==WAIT_OBJECT_0) { //begin filter ipfilter_pkt(1600,global[Write_cur].Buffer); //end filter BOOL ok; ok=ProtoMain(global[Write_cur].Buffer); NatPacket(global[Write_cur].Buffer); /* if ((global[Write_cur].Buffer[0]==0)&&(global[Write_cur].Buffer[1]==(INNO-0x30))) ok=Authentication(global[Write_cur].Buffer+2); if((global[Write_cur].Buffer[0]==0)&&(global[Write_cur].Buffer[1]==(OUTNO-0x30))) ContentFilter((char*)(global[Write_cur].Buffer+2)); if (!ok) { global[Write_cur].Buffer[0]=1; // global[Write_cur].Buffer[1]=2; } SystemLog();*/ //end filter WriteBuffer(global[Write_cur].Buffer, &global[Write_cur].overlap); // WriteFileEx(global_handle,global[Write_cur].Buffer,1516,&global[Write_cur].overlap, // WriteCompletionRoutine); BOOL R3=ReleaseMutex(global_mutex); SleepEx(1,TRUE); Write_cur++; } } } } } VOID WriteBuffer(BYTE *Buffer,LPOVERLAPPED pOverlapped) { BOOL ok=FALSE; ok=WriteFileEx(global_handle,Buffer,1516,pOverlapped, WriteCompletionRoutine); SendSpecialBuffer(); } VOID WINAPI WriteCompletionRoutine(DWORD dwErrorCode, DWORD dwNumberOfBytesTransferred, LPOVERLAPPED pOverlapped) { }